using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.IO;
using System.Web;
using AEL.ACT;
using AEL.COM;
using AEL.BOD;
using BEL;
using HER;


namespace DEL.COM
{
    public class DO_Com_Devolucion_Prestamo_Egr
    {

        #region Adapter
        private static CEL.COM.DO_Com_Devolucion_Prestamo_Egr _adpCom_Devolucion_Prestamo_Egr;
        private static CEL.COM.DO_Com_Devolucion_Prestamo_Egr adpCom_Devolucion_Prestamo_Egr
        {
            get
            {
                if (_adpCom_Devolucion_Prestamo_Egr == null)
                    _adpCom_Devolucion_Prestamo_Egr = new CEL.COM.DO_Com_Devolucion_Prestamo_Egr();
                return _adpCom_Devolucion_Prestamo_Egr;
            }
        }


        private static CEL.COM.DO_Com_Devolucion_Prestamo_Egr_Det _adpCom_Devolucion_Prestamo_Egr_Det;
        private static CEL.COM.DO_Com_Devolucion_Prestamo_Egr_Det adpCom_Devolucion_Prestamo_Egr_Det
        {
            get
            {
                if (_adpCom_Devolucion_Prestamo_Egr_Det == null)
                    _adpCom_Devolucion_Prestamo_Egr_Det = new CEL.COM.DO_Com_Devolucion_Prestamo_Egr_Det();
                return _adpCom_Devolucion_Prestamo_Egr_Det;
            }
        }

        private static CEL.BOD.DO_Bod_Orden _adpBod_Orden;
        private static CEL.BOD.DO_Bod_Orden adpBod_Orden
        {
            get
            {
                if (_adpBod_Orden == null)
                    _adpBod_Orden = new CEL.BOD.DO_Bod_Orden();
                return _adpBod_Orden;
            }
        }

        private static CEL.BOD.DO_Bod_Kardex _adpBod_Kardex;
        private static CEL.BOD.DO_Bod_Kardex adpBod_Kardex
        {
            get
            {
                if (_adpBod_Kardex == null)
                    _adpBod_Kardex = new CEL.BOD.DO_Bod_Kardex();
                return _adpBod_Kardex;
            }
        }

        #endregion

        #region Operaciones con datos
        public static void EmitirExcepcion(string mensaje, string caso)
        {
            Exception eCaso = new System.Exception(caso);
            Exception otroEX = new System.Exception(mensaje, eCaso);
            throw otroEX;
        }


        public static void Insert_Orden(Scope s, ref Com_Devolucion_Prestamo_Egr p_Objeto)
        {
            try
            {
                adpCom_Devolucion_Prestamo_Egr_Det.Adapter.BeginTransaction();
                adpBod_Orden.Adapter.Transaction = adpCom_Devolucion_Prestamo_Egr_Det.Adapter.Transaction;

                List<Com_Devolucion_Prestamo_Egr_Det> lstComDevolucionPrestamoEgrDet = adpCom_Devolucion_Prestamo_Egr_Det.GetByPrestamo(s, p_Objeto.Id);
                Bod_Orden bodOrden = null;
                foreach (Com_Devolucion_Prestamo_Egr_Det ComDevolucionPrestamoEgrDet in lstComDevolucionPrestamoEgrDet)
                {
                    bodOrden = new Bod_Orden();
                    bodOrden.Origen = "DPE";
                    bodOrden.Tipo = "EGR";
                    bodOrden.Origen_Id = p_Objeto.Id;
                    bodOrden.Fecha_Creacion = DateTime.Now;
                    bodOrden.Creacion_Per_Personal_Id = s.Per_Personal_Id;
                    bodOrden.Fecha_Update = DateTime.Now;
                    bodOrden.Update_Per_Personal_Id = s.Per_Personal_Id;
                    bodOrden.Bod_Bodega_Id = p_Objeto.Bod_Bodega_Id;
                    bodOrden.Com_Articulo_Id = ComDevolucionPrestamoEgrDet.Com_Articulo_Id;
                    bodOrden.Cantidad = ComDevolucionPrestamoEgrDet.Cantidad;
                    bodOrden.Bod_Unidad_Id = ComDevolucionPrestamoEgrDet.Referencia_Bod_Unidad_Id;
                    bodOrden.Origen_Det_Id = ComDevolucionPrestamoEgrDet.Id;
                    bodOrden.Bod_Kardex_Id = null;
                    bodOrden.XML = null;
                    bodOrden.Fecha = p_Objeto.Fecha;
                   
                    adpBod_Orden.Insert(s, bodOrden);
                    Com_Devolucion_Prestamo_Egr_Det comDevolucionPrestamoEgrDetNuevo = new Com_Devolucion_Prestamo_Egr_Det(ComDevolucionPrestamoEgrDet);
                    comDevolucionPrestamoEgrDetNuevo.Bod_Orden_Id = bodOrden.Id;
                    adpCom_Devolucion_Prestamo_Egr_Det.Update(s, comDevolucionPrestamoEgrDetNuevo, ComDevolucionPrestamoEgrDet);
                    
                }
                adpCom_Devolucion_Prestamo_Egr_Det.Adapter.CommitTransaction();
            }
            catch (Exception e)
            {
                adpCom_Devolucion_Prestamo_Egr_Det.Adapter.RollbackTransaction();
                if (e.Message.StartsWith("MSJ"))
                { throw (e); }
                else
                { EmitirExcepcion(TXT_Mensajes._MSJ14, e.Message); }
            }
        }

        public static void Insert_Kardex(Scope s, ref Com_Devolucion_Prestamo_Egr p_Objeto)
        {
            try
            {
                adpBod_Orden.Adapter.BeginTransaction();

                List<Bod_Orden> lstBodOrden = adpBod_Orden.GetByOrigenOrigenId(s, "DPE", p_Objeto.Id);
                Bod_Kardex bodKardex = null;
                foreach (Bod_Orden bodOrden in lstBodOrden)
                {
                    bodKardex = new Bod_Kardex();
                    bodKardex.Int_Empresa_Id = s.Int_Empresa_Id;
                    bodKardex.Bod_Bodega_Id = bodOrden.Bod_Bodega_Id;
                    bodKardex.Marca = "ABI";
                    bodKardex.Tipo = "EGR";
                    bodKardex.Fecha_Creacion = DateTime.Now;
                    bodKardex.Creacion_Per_Personal_Id = s.Per_Personal_Id;
                    bodKardex.Fecha_Update = DateTime.Now;
                    bodKardex.Update_Per_Personal_Id = s.Per_Personal_Id;
                    bodKardex.Com_Articulo_Id = bodOrden.Com_Articulo_Id;
                    bodKardex.Cantidad = bodOrden.Referencia_Cantidad;
                    bodKardex.Xml = bodOrden.Fecha_Creacion.ToString();
                    bodKardex.Fecha = p_Objeto.Fecha;
                    
                    DEL.BOD.DO_Bod_Kardex.Insert(s, ref bodKardex);
                    Bod_Orden nuevoObjeto = new Bod_Orden(bodOrden);
                    nuevoObjeto.Bod_Kardex_Id = bodKardex.Id;
                    adpBod_Orden.Update(s, nuevoObjeto, bodOrden);
                                      
                }
                adpBod_Orden.Adapter.CommitTransaction();
            }
            catch (Exception e)
            {
                adpBod_Orden.Adapter.RollbackTransaction();
                if (e.Message.StartsWith("MSJ"))
                { throw (e); }
                else
                { EmitirExcepcion(TXT_Mensajes._MSJ14, e.Message); }
            }
        }

        public static void Delete_Kardex(Scope s, ref Com_Devolucion_Prestamo_Egr p_Objeto)
        {
            try
            {
                List<Bod_Orden> lstBodOrden = adpBod_Orden.GetByOrigenOrigenId(s, "DPE", p_Objeto.Id);
                foreach (Bod_Orden bodOrden in lstBodOrden)
                {
                    Bod_Orden nuevoObjeto = new Bod_Orden(bodOrden);
                    nuevoObjeto.Bod_Kardex_Id = null;
                    adpBod_Orden.Update(s, nuevoObjeto, bodOrden);

                    List<Bod_Kardex> lstbodKardex = adpBod_Kardex.GetById(s, bodOrden.Bod_Kardex_Id);
                    foreach (Bod_Kardex Bodkardex in lstbodKardex)
                    {
                        DEL.BOD.DO_Bod_Kardex.Delete(s, Bodkardex);
                    }
                }
            }
            catch (Exception e)
            {
                if (e.Message.StartsWith("MSJ"))
                { throw (e); }
                else
                { EmitirExcepcion(TXT_Mensajes._MSJ14, e.Message); }
            }
        }

        public static void Delete_Orden(Scope s, ref Com_Devolucion_Prestamo_Egr p_Objeto)
        {
            try
            {


                List<Bod_Orden> lstBodOrden = adpBod_Orden.GetByOrigenOrigenId(s, "DPE", p_Objeto.Id);
                foreach (Bod_Orden bodOrden in lstBodOrden)
                {

                    List<Com_Devolucion_Prestamo_Egr_Det> lstComDevolucionPrestamoEgrDet = adpCom_Devolucion_Prestamo_Egr_Det.GetByPrestamo(s, p_Objeto.Id);
                    foreach (Com_Devolucion_Prestamo_Egr_Det comDevolucionPrestamoEgrDet in lstComDevolucionPrestamoEgrDet)
                    {
                        Com_Devolucion_Prestamo_Egr_Det comDevolucionPrestamoEgrDetNuevo = new Com_Devolucion_Prestamo_Egr_Det(comDevolucionPrestamoEgrDet);
                        comDevolucionPrestamoEgrDetNuevo.Bod_Orden_Id = null;
                        adpCom_Devolucion_Prestamo_Egr_Det.Update(s, comDevolucionPrestamoEgrDetNuevo, comDevolucionPrestamoEgrDet);
                    }
                    adpBod_Orden.Delete(s, bodOrden);
                }

            }
            catch (Exception e)
            {
                if (e.Message.StartsWith("MSJ"))
                { throw (e); }
                else
                { EmitirExcepcion(TXT_Mensajes._MSJ14, e.Message); }
            }
        }

        #endregion

    }
}
